/*
 * @Author: your name
 * @Date: 2021-11-02 17:46:11
 * @LastEditTime: 2021-11-02 18:27:57
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-source-code-snanndom\src\mySnabbdom\patchVnode.js
 */
import createElment from './createElement'
import updateChildren from './updateChildren'

/** 传入的老节点的被传入的新节点整体判断替换 */
export default function patchVnode(oldVnode, newVnode) {
    // 判断新旧节点是否是同一对象
    if (newVnode === oldVnode) return;

    if (newVnode.text && (!newVnode.children || !newVnode.children.length)) {
        console.log('新节点--含有text内容：', newVnode.text);
        if (newVnode.text != oldVnode.text) {
            // 如果新的虚拟节点中的text和老的虚拟节点的text不同，那么直接让新的text写入老的elm中即可，如果老的elm中的是children，也会被直接替换掉
            oldVnode.elm.innerText = newVnode.text
        }
    } else {
        console.log('新节点--没有text内容：-表示有children');
        if (oldVnode.children && oldVnode.children.length) {
            // 老的有children，最复杂的情况，新老都有children
            updateChildren(oldVnode.elm, oldVnode.children, newVnode.children)

        } else {
            console.log('老节点没有children');
            // 清空老的inerHTML
            oldVnode.elm.innerHTML = ''
            // 添加新的children
            for (let i = 0; i < newVnode.children.length; i++) {
                let dom = createElment(newVnode.children[i])
                oldVnode.elm.appendChild(dom)
            }
        }
    }
}